package com.yunke.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunke.entity.YunkeCommunity;
import com.yunke.entity.vo.YunkeCommunityVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 社群 Mapper 接口
 * 
 * @author yunke
 * @since 1.0.0
 */
@Mapper
public interface YunkeCommunityMapper extends BaseMapper<YunkeCommunity> {

    /**
     * 分页查询社群列表
     */
    Page<YunkeCommunityVo> selectCommunityPage(Page<YunkeCommunityVo> page,
                                               @Param("keyword") String keyword,
                                               @Param("communityType") Integer communityType,
                                               @Param("categoryId") Long categoryId,
                                               @Param("region") String region,
                                               @Param("longitude") BigDecimal longitude,
                                               @Param("latitude") BigDecimal latitude,
                                               @Param("distance") Integer distance,
                                               @Param("userId") Long userId);

    /**
     * 获取社群详情
     */
    YunkeCommunityVo selectCommunityDetail(@Param("id") Long id, @Param("userId") Long userId);

    /**
     * 获取推荐社群列表
     */
    List<YunkeCommunityVo> selectRecommendCommunities(@Param("userId") Long userId, @Param("limit") Integer limit);

    /**
     * 获取热门社群列表
     */
    List<YunkeCommunityVo> selectHotCommunities(@Param("userId") Long userId, @Param("limit") Integer limit);

    /**
     * 获取附近社群列表
     */
    List<YunkeCommunityVo> selectNearbyCommunities(@Param("longitude") BigDecimal longitude,
                                                    @Param("latitude") BigDecimal latitude,
                                                    @Param("distance") Integer distance,
                                                    @Param("userId") Long userId,
                                                    @Param("limit") Integer limit);

    /**
     * 根据分类获取社群列表
     */
    List<YunkeCommunityVo> selectCommunitiesByCategory(@Param("categoryId") Long categoryId,
                                                       @Param("userId") Long userId,
                                                       @Param("limit") Integer limit);

    /**
     * 获取用户创建的社群列表
     */
    List<YunkeCommunityVo> selectUserCreatedCommunities(@Param("userId") Long userId);

    /**
     * 获取用户加入的社群列表
     */
    List<YunkeCommunityVo> selectUserJoinedCommunities(@Param("userId") Long userId);

    /**
     * 搜索社群
     */
    List<YunkeCommunityVo> searchCommunities(@Param("keyword") String keyword,
                                             @Param("userId") Long userId,
                                             @Param("limit") Integer limit);

    /**
     * 更新社群成员数量
     */
    int updateMemberCount(@Param("communityId") Long communityId, @Param("count") Integer count);

    /**
     * 更新社群统计数据
     */
    int updateCommunityStats(@Param("communityId") Long communityId,
                            @Param("activityLevel") Integer activityLevel,
                            @Param("hotScore") Integer hotScore);

    /**
     * 批量更新社群状态
     */
    int batchUpdateStatus(@Param("ids") List<Long> ids, @Param("status") Integer status);

    /**
     * 获取社群统计数据
     */
    YunkeCommunityVo selectCommunityStats(@Param("communityId") Long communityId);
} 